import { http } from '@/api/service/request';
import type { BaseResult, ResultTable } from '@/api/service/types';

export interface CourseResult {
  /** 课程ID */
  nodeId: number;
  /** 课程名称 */
  name: string;
  /** 课程描述 */
  description: string;
  /** 创建时间 */
  createTime: string;
  /** 更新时间 */
  updateTime: string;
  /** 课程编码 */
  code: string;
  /** 课程学分 */
  credit: number;
  /** 创建人ID */
  createdById: number;
  /** 创建人用户名 */
  createdByUsername: string;
  /** 更新人ID */
  updatedById: number;
  /** 更新人用户名 */
  updatedByUsername: string;
}

/** 课程查询参数 */
export interface CourseQueryParams {
  /** 当前页码 */
  currentPage?: number;
  /** 每页条数 */
  pageSize?: number;
  /** 课程名称 */
  name?: string;
  /** 课程编码 */
  code?: string;
  /** 课程描述 */
  description?: string;
}

/** 课程选项接口（简化版，用于下拉选择） */
export interface CourseOption {
  /** 课程ID */
  nodeId: number;
  /** 课程名称 */
  name: string;
  /** 课程编码 */
  code?: string;
}

/** 获取课程列表 */
export const fetchGetCourseList = (params?: CourseQueryParams) => {
  return http.request<ResultTable<CourseResult>>('get', '/courses', { params });
};

/** 获取所有课程选项（用于下拉选择） */
export const fetchGetCourseOptions = () => {
  return http.request<BaseResult<CourseOption[]>>('get', '/courses/options');
};

/** 获取课程详情 */
export const fetchGetCourseDetail = (id: string) => {
  return http.request<BaseResult<CourseResult>>('get', `/courses/${id}`);
};

/** 创建课程 */
export const fetchCreateCourse = (data: any) => {
  return http.request<BaseResult<CourseResult>>('post', '/courses', { data });
};

/** 更新课程信息 */
export const fetchUpdateCourse = (id: string, data: any) => {
  return http.request<BaseResult<CourseResult>>('put', `/courses/${id}`, { data });
};

/** 删除课程 */
export const fetchDeleteCourse = (id: string) => {
  return http.request<BaseResult<any>>('delete', `/courses/${id}`);
};

/** 获取课程访问权限列表 */
export const fetchGetCoursePermissions = (courseId: string) => {
  return http.request<BaseResult<any>>('get', `/courses/${courseId}/permissions`);
};

/** 更新课程授权用户列表 */
export const fetchUpdateCoursePermissions = (courseId: string, userIds: string[]) => {
  return http.request<BaseResult<any>>('put', `/courses/${courseId}/permissions`, { data: userIds });
};

/** 获取课程的前置课程列表 */
export const fetchGetCoursePrerequisites = (courseId: string) => {
  return http.request<BaseResult<CourseResult[]>>('get', `/courses/${courseId}/prerequisites`);
};

/** 更新课程的前置课程列表 */
export const fetchUpdateCoursePrerequisites = (courseId: string, preCourseIds: string[]) => {
  return http.request<BaseResult<any>>('put', `/courses/${courseId}/prerequisites`, { data: preCourseIds });
}; 